国产永久精品一区二区污污,日本免费在线视频,国产一级A视频一区二区,黄小说在线观看一区

頂部圖片
022-23715128

聯系方式

CONTACT
  • 公眾號
    新浪微博
  • 中國 ● 天津

    聯系地址:天津市西青區華鼎高科技發展中心

  • 公司座機:022-23715128

    24小時熱線:15522534786

    聯系QQ:2085429559

    公司郵箱:gvt@techlego.com

當前位置: 首頁 > 新聞資訊 > 行業新聞 >
新聞資訊NEWS

日期:2024-07-12 15:27 瀏覽次數: 作者:來高科技
如何通過SDK獲取兩個坐標系之間的旋轉矩陣和平移向量 分享到:

 

在三維掃描應用中,獲取兩個坐標系之間的旋轉矩陣和平移向量是一項至關重要的技術。它不僅用于將不同視角下的掃描數據準確對齊,還在多設備數據拼接融合、幾何校準、機器人控制和場景理解等方面發揮著關鍵作用。通過準確的坐標轉換和對齊,可以大地提高三維掃描數據的精度和實用性,從而在多個領域中實現更準確的測量和提升分析效率。

計算兩個坐標系之間的旋轉矩陣和平移向量的函數原型如下:

double get_rt_by_pt_pairs(const pos3f* pts1, const pos3f* pts2, int total, double m[3][3], double t[3]);

參數pts1為坐標系1下的點坐標

參數pts2 為坐標系2下的點坐標

參數total 為配對點的數量

參數double m[3][3] 為計算后的旋轉矩陣

參數double t[3] 為計算后的平移向量

1

定義一個坐標系數組

2

定義一個空的坐標系數組

3

定義一個旋轉矩陣和平移向量

4

計算坐標一經過旋轉平移后的坐標系2 

5

計算兩個坐標系之間的旋轉矩陣和平移向量并輸出

以上我們完成了獲取兩個坐標系之間的旋轉矩陣和平移向量的操作,有了這個功能就能夠有效地解決數據對齊、誤差校正和坐標變換等多方面的問題。這不僅提升了掃描數據的精度和可靠性,還為項目高效推進提供了強有力的支持。

源代碼

int  main()

{

//通過IP端口創建協議

auto protocol = techlego::create_binary_protocol(L"localhost", 5252);

//通過協議創建客戶端

auto client = techlego::h_scan3d_client::make_shared(protocol);

//坐標系1下的點坐標

std::array<techlego::pos3f, 4>points1 = {

{ {-65.4562 ,-54.4644,378.7092},

{-65.3003 ,-54.4709 ,378.7567},

{-15.7148 ,-14.9020,380.3256 },

{-65.2903 ,- 54.4111 ,378.7333} } };

//坐標系2下的點坐標

std::array<techlego::pos3f, 4>points2 = {};

// 構建繞Z軸旋轉45度的旋轉矩陣

Eigen::AngleAxisd angle_axis(M_PI / 4, Eigen::Vector3d(0, 0, 1));

Eigen::Matrix3d m = angle_axis.toRotationMatrix();

// 構建平移向量

Eigen::Vector3d translate_vector(1, 3, 4);

// 對坐標系1中的點應用之前構建的旋轉矩陣和平移向量,得到坐標系2下的該點

for (int i = 0; i < points1.size(); i++)

{

// 用變換矩陣對坐標進行變換

// 點在坐標系1下坐標

Eigen::Vector3d point(points1[i].m_x, points1[i].m_y, points1[i].m_z);

// 變換,相當于【旋轉矩陣*坐標+平移向量】

Eigen::Vector3d point_after_trans = m * point + translate_vector;

std::cout << "變換后的坐標為:" << std::endl << point_after_trans.transpose() << std::endl;

points2[i].m_x = point_after_trans(0);

points2[i].m_y = point_after_trans(1);

points2[i].m_z = point_after_trans(2);

}

//輸入,配對點的數量

int total = static_cast<int>(points1.size());

//輸出,旋轉矩陣

//輸出,平移向量

double mm[3][3] = { 0 }, t[3] = { 0 };

//由點對獲取坐標系1變換到坐標系2下的旋轉矩陣和平移向量

auto pairs = techlego::am::get_rt_by_pt_pairs(points2.data(), points1.data(), total, mm, t);

std::cout << "原旋轉矩陣:\n" << m << "\n";

std::cout << "原平移向量:" << translate_vector.transpose()  << "\n";

std::cout << "解得的旋轉矩陣:";

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

std::cout << " " << mm[i][j] << '\t';

}

std::cout << std::endl;

}

std::cout << "解得的平移向量:";

for (int i = 0; i < 3; i++)

{

std::cout << t[i] << " ";

}

std::cout << "\n各個點對距離的平方和:" << pairs << std::endl;

return 0;

}

 

 
 

官網視頻號·點擊視頻·關注我們

 


 

經典案例

 

多機聯動掃描系統助力嫦娥五號構建月表地形

 

噴漆自動化三維視覺全流程

 

混凝土立方試塊尺寸三維檢測全流程

↙“點擊下方”查看更多精彩內容

  • 上一篇:優化導入:構建高效點云數據處理工作流
  • 下一篇:光源亮度可調性:優化三維掃描數據質量
  • 相關推薦 NEWS More>